const fp = require('lodash/fp');

const cars = [
    {name: 'Ferrari FF', horsepower: 660,
    dollar_value: 700000, in_stock: true},
    {name: 'Spyker C12 Zagato', horsepower: 650,
    dollar_value: 648000, in_stock: false},
    {name: 'Jaguar XKR-S', horsepower: 550,
    dollar_value: 132000, in_stock: false},
    {name: 'Audi R8', horsepower: 525,
    dollar_value: 114200, in_stock: false},
    {name: 'Aston Martin One-77', horsepower: 750,
    dollar_value: 1850000, in_stock: true},
    {name: 'Aston Martin One-77', horsepower: 750,
    dollar_value: 1850000, in_stock: true}];

//练习1的代码
let isLastInStock = fp.flowRight(fp.prop('in_stock'), fp.last);

//console.log(fp.prop(2)(cars)) 与 fp.prop(2, cars)一样;

console.log(isLastInStock(cars));

//练习2的代码
let firstCarName = fp.flowRight(fp.prop('name'), fp.first);
console.log(firstCarName(cars));

//练习3的代码
let _average = function (xs) {
    return fp.reduce(fp.add, 0, xs) / xs.length;
}; // <- 无须改动

//平均值
let averageValue = fp.flowRight(_average, fp.map(car => car.dollar_value));
console.log(averageValue(cars));

//练习4的代码
//原有的将一个或多个空格替换成一个下划线
let _underscore = fp.replace(/\W+/g, '_');
//全部小写字母
let toLowerCase = fp.curry(str => str.toLowerCase());
//这里连续用了两个map函数。首先是将文本全部小写字母，然后将多个空格替换成一个下划线
let sanitizeNames = fp.flowRight(fp.map(str => _underscore(str)), fp.map(str => toLowerCase(str)));
console.log(sanitizeNames(['We enJoy photos', 'We tried to overcome Political Virus']));